package 中等;

public class 删除节点中的重复节点 {

    public static void main(String[] args) {

        ListNode listNode = new ListNode(5);
        ListNode listNode1 = new ListNode(4,listNode);
        ListNode listNode2 = new ListNode(3,listNode1);
        ListNode listNode3 = new ListNode(3,listNode2);
        ListNode listNode4 = new ListNode(1,listNode3);
        System.out.println(listNode4);
        ListNode listNode5 = deleteDuplication(listNode4);
        System.out.println(listNode5);


    }
    public static ListNode deleteDuplication(ListNode pHead){
        if(pHead == null || pHead.next == null){
            return pHead;
        }
        // 自己构建辅助头结点
        ListNode head = new ListNode(0);//这个0是任意选的
        head.next = pHead;
        ListNode pre = head;
        ListNode cur = pHead;
        //循环遍历，直到链表为空
        while(cur!=null){
            //如果是重复值
            if(cur.next != null && cur.next.val == cur.val){
                // 相同结点一直往后移动,直到找到 cur和他下一个节点不相同
                while(cur.next != null && cur.next.val == cur.val){
                    cur = cur.next;
                }
                // 退出循环时，cur 指向重复值，也需要删除，而 cur.next 指向第一个不重复的值
                // cur 继续往后遍历
                cur = cur.next;
                // pre 连接新结点
                pre.next = cur;
            }else{
                //else表示值不相等即不重复时
                pre = cur;
                cur = cur.next;
            }
        }
        return head.next;
    }
}
